package cn.da.shuai.cool.system.service.service;

import cn.da.shuai.cool.mybatis.service.ICoolService;
import cn.da.shuai.cool.system.model.entity.dept.DeptUserDto;
import cn.da.shuai.cool.system.model.entity.dept.UpdateDeptUserVo;
import cn.da.shuai.cool.system.model.entity.user.*;
import cn.da.shuai.cool.system.model.enums.user.UserStatusType;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 系统用户表 服务类
 * </p>
 *
 * @author 大帅哥
 * @since 2025-01-03
 */
public interface ICoolUserService extends ICoolService<CoolUser> {

    /**
     * 新增用户
     *
     * @param vo 用户信息
     * @return 是否成功
     */
    Boolean add(SaveUserVo vo);

    @Transactional(rollbackFor = Exception.class)
    Boolean update(SaveUserVo vo);

    /**
     * 重置密码
     *
     * @param id 用户ID
     * @return 是否成功
     */
    Boolean resetPassword(Integer id);

    /**
     * 修改用户状态
     *
     * @param id     用户ID
     * @param status 状态
     * @return 是否成功
     */
    Boolean changeStatus(Integer id, UserStatusType status);

    CoolUser getByUsername(String username);

    List<String> getMenuPermsById(Integer id);

    boolean modifyPassword(ModifyPasswordVo vo);

    List<Integer> getUserIdsByRole(Integer userId);

    List<Integer> getUserIdsByPosition(Integer userId);

    List<Integer> getUserIdsByDept(Integer userId);

    boolean existUserNo(String userCode, Integer id);

    UserDto getDetails(Integer id);

    List<DeptUserDto> getDeptUserList(Integer userId);

    boolean updateIp(Integer userId, String ip);

    @Transactional(rollbackFor = Exception.class)
    boolean updateDeptUser(UpdateDeptUserVo vo);

    List<UserListDto> getUserList(SearchUserVo vo);
}
